// package cn.frank.framework.caesar.module.ai.langChain4j.conf.swagger;
//
// import com.github.xiaoymin.knife4j.spring.annotations.EnableKnife4j;
// import org.springframework.boot.actuate.autoconfigure.endpoint.web.CorsEndpointProperties;
// import org.springframework.boot.actuate.autoconfigure.endpoint.web.WebEndpointProperties;
// import org.springframework.boot.actuate.autoconfigure.web.server.ManagementPortType;
// import org.springframework.boot.actuate.endpoint.ExposableEndpoint;
// import org.springframework.boot.actuate.endpoint.web.*;
// import org.springframework.boot.actuate.endpoint.web.annotation.ControllerEndpointsSupplier;
// import org.springframework.boot.actuate.endpoint.web.annotation.ServletEndpointsSupplier;
// import org.springframework.boot.actuate.endpoint.web.servlet.WebMvcEndpointHandlerMapping;
// import org.springframework.boot.autoconfigure.condition.ConditionalOnMissingBean;
// import org.springframework.boot.autoconfigure.condition.ConditionalOnMissingClass;
// import org.springframework.context.annotation.Bean;
// import org.springframework.context.annotation.Configuration;
// import org.springframework.core.env.Environment;
// import org.springframework.util.StringUtils;
// import springfox.documentation.swagger2.annotations.EnableSwagger2WebMvc;
//
// import java.util.ArrayList;
// import java.util.Collection;
// import java.util.List;
//
// /**
//  * @author renjy
//  * @since 2023/4/26 9:03:05
//  */
//
// /**
//  * @author <a href="mailto:xiaoymin@foxmail.com">xiaoymin@foxmail.com</a>
//  * 2020/09/18 11:04
//  * @since:knife4j-spring-boot2-demo 1.0
//  */
// @EnableSwagger2WebMvc
// @EnableKnife4j
// @Configuration
// @ConditionalOnMissingClass("cn.frank.framework.caesar.starter.web.core.conf.swagger.Knife4jCompatibleSpring26Config")
// public class Knife4jCompatibleSpring26Config {
//
//
//     /**
//      * 增加如下配置可解决Spring Boot 6.x 与Swagger 3.0.0 不兼容问题
//      *
//      * 当框架引入spring-boot-starter-actuator会导致不兼容问题, 此处解决该问题
//      * org.springframework.context.ApplicationContextException: Failed to start bean 'documentationPluginsBootstrapper';
//      * nested exception is java.lang.NullPointerException
//      **/
//     @Bean
//     public WebMvcEndpointHandlerMapping webEndpointServletHandlerMapping(WebEndpointsSupplier webEndpointsSupplier,
//                                                                          ServletEndpointsSupplier servletEndpointsSupplier,
//                                                                          ControllerEndpointsSupplier controllerEndpointsSupplier,
//                                                                          EndpointMediaTypes endpointMediaTypes,
//                                                                          CorsEndpointProperties corsProperties,
//                                                                          WebEndpointProperties webEndpointProperties,
//                                                                          Environment environment) {
//         List<ExposableEndpoint<?>> allEndpoints = new ArrayList();
//         Collection<ExposableWebEndpoint> webEndpoints = webEndpointsSupplier.getEndpoints();
//         allEndpoints.addAll(webEndpoints);
//         allEndpoints.addAll(servletEndpointsSupplier.getEndpoints());
//         allEndpoints.addAll(controllerEndpointsSupplier.getEndpoints());
//         String basePath = webEndpointProperties.getBasePath();
//         EndpointMapping endpointMapping = new EndpointMapping(basePath);
//         boolean shouldRegisterLinksMapping = this.shouldRegisterLinksMapping(webEndpointProperties, environment, basePath);
//         return new WebMvcEndpointHandlerMapping(endpointMapping, webEndpoints, endpointMediaTypes, corsProperties.toCorsConfiguration(), new EndpointLinksResolver(allEndpoints, basePath), shouldRegisterLinksMapping, null);
//     }
//
//     private boolean shouldRegisterLinksMapping(WebEndpointProperties webEndpointProperties, Environment environment, String basePath) {
//         return webEndpointProperties.getDiscovery().isEnabled() && (StringUtils.hasText(basePath) || ManagementPortType.get(environment).equals(ManagementPortType.DIFFERENT));
//     }
// }
